1. Field of the Invention
This invention relates to buffering characteristics of data transfer systems. More specifically, the invention relates to dynamic adjustment of the buffering characteristic in data transfer systems.
2. Related Art
It is common practice in data transfer systems to employ a pipeline of buffers on a communication line between data terminal equipment (DTE) and data connection equipment (DCE) as a holding area to hold data awaiting its turn to be transferred out along the line. The same pipeline is employed to hold data coming from the DCE awaiting its turn to be transferred to the DTE. The pipeline consists of free buffers and full buffers with the data following a first in-first out (FIFO) transmission scheme. At initialization, all buffers are free. As the buffers are filled, they cycle through to transmit out with free buffers being cycled back to be filled. This cycling is performed by passing pointers corresponding to free and full buffers. When the fill rate is faster than the rate at which data can be transferred, eventually all buffers will be full and the rate of fill will need to be reduced to fill only as fast as buffers are emptied. Alternatively, if the fill rate is slower than rate of transfer, partially filled buffers will be transferred. Where the number of buffers is small, a blocking state may result when the filling end of the pipeline runs out of buffers because the buffers have not had time to cycle back, so no buffers are available to accept data. When no buffers are available, the routine filling the buffers must be suspended (i.e. "blocked") until more buffers cycle back. This creates latency in the data transfer.
Common data transfer systems employ the static buffering characteristic designed to maximize throughput in the case of file transfers wherein large blocks of data are being transferred with only minimal latency constraints and minimal real time constraints. For this type of transfer, an optimal buffering characteristic is a large number of large buffers, thus allowing the large blocks of data to be buffered in preparation for transfer, thereby allowing the processor to execute other tasks while waiting for the data to transfer out. However, this buffering characteristic is not optimal for "chatting" on-line. Chatting is where the users are transmitting messages back and forth which are being transmitted from the keyboard. Thus, chatting takes place at normal typing speeds requiring low throughput, but also low latency to maintain the desired interactive feel. The optimal characteristic for chatting is a large number of small buffers. This characteristic reduces latency because it is less likely to run out of buffers, and normal typing speed will not fill larger buffers to any significant extent. Since all real systems suffer a constraint on the size of memory available, the number of buffers of a given size which may be used is limited. Thus, a trade-off exists between a large number of small buffers (ideal for chatting) and a smaller number of large buffers (ideal for file transfer). Since data transfer systems are typically rated based on throughput of file transfers, the desirable buffer characteristics for chatting have gone largely ignored.
Many newer modems offer both data mode, in which either file transfer or chatting can be performed, and voice mode whereby voice data are transmitted through the communication pipeline. In voice mode modems suffer both significant real time and latency constraints. Therefore, an optimal buffering characteristic for voice mode transmissions has a medium number of medium-size buffers. As discussed above, system designers typically optimize for file transfer and ignore the needs of voice transmissions.
As the number of modes in which data transmit systems operate increase, the frailties of the static buffering characteristic become increasingly problematic. It is, therefore, desirable to develop a system whereby buffering characteristics of the data transfer pipe can be dynamically adjusted in accordance with the data to be transferred.